package com.ebao.service.base;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import com.ebao.util.PageResult;

/**
 * @author snow
 * @date 2012-6-23
 * @param <P>
 */
public interface ICrudService<P> {
	
	/**
	 * 保存新对象
	 */
	public void save(P obj);
	
	/**
	 * 保存对象集合
	 */
	public void save(Collection<P> coll);
	
	/**
	 * 更新对象
	 */
	public void update(P obj);
	
	/**
	 * 根据Id删除对象
	 */
	public void delete(Serializable id);
	
	/**
	 * 删除P对象
	 */
	public void delete(P obj);
	
	/**
	 * 删除P对象集合
	 */
	public void delete(Collection<P> coll);
	
	/**
	 * 删除P对象数组
	 */
	public void delete(P[] arr);
	
	/**
	 * 根据Id查询对象
	 */
	public P getById(Serializable id);
	
	/**
	 * 根据查询语句得到PO对象
	 */
	public P getByJpql(String jpql, Object...objs);
	
	/**
	 * 分页查找PO对象集合
	 */
	public List<P> getListByJpql(String jpql, Object... objs);
	
	/**
	 * 分页查找PO对象集合
	 */
	public List<P> getByJpql(String jpql, int currentPage, int pageSize, Object... objs);
	
	/**
	 * 分页查找，封装返回
	 */
	public PageResult<P> getPageByJpql(String jpql, int currentPage, int pageSize, Object... objs);
	
	/**
	 * 执行更新操作
	 */
	public int executeJpql(String jpql, Object... objs);
	
	/**
	 * 查询对象个数
	 */
	public int getCount(String jpql, Object... objs);
	
	
	/**
	 * 用SQL查询记录数
	 */
	public int getCountBySql(String sql, Object... objs);
	
	/**
	 * 用SQL执行更新操作update/delete
	 */
	public int updateBySql(String sql, Object... objs);
	
	/**
	 * 用SQL查询对象，返回类型同resultClass
	 */
	@SuppressWarnings("rawtypes")
	public Object getBySql(String sql, Class resultClass, Object... objs);
	
	/**
	 * 用SQL查询对象集合，返回类型同resultClass
	 */
	@SuppressWarnings("rawtypes")
	public List getListBySql(String sql, Class resultClass, Object... objs);
	
	/**
	 * 用SQL分页查询对象，返回类型同resultClass
	 */
	@SuppressWarnings("rawtypes")
	public List getPageBySql(String sql, Class resultClass, int begin, int max, Object... objs);
	
}
